package Controller;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.security.AccessControlException;
import javax.swing.*;
import Controller.DialogoParametroAG;
import Controller.DialogoProgreso;
import Controller.Estandarx;
import Controller.ParametrosEntrada;
import Controller.ParametrosSalida;
import Controller.OpcionesGenetico;
import Controller.GraficadorDLG;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JLabel;

import Controller.ModuloDLG;

/**
 * Implementacion de la clase ModuloDLG en interfaz grafica mediante un JPanel
 * siguiendo el estandar dado por el grupo de integracion (hereda de la clase
 * estandarx
 * 
 * ojo:llamado desde modulo --> parametrosPorventana=false
 */
public class EstandarxDLG extends Estandarx {
	public JFrame ventanaPrincipal=null;
	public ModuloDLG moduloDLG = new ModuloDLG(this); // @jve:decl-index=0:
	private DialogoParametroAG d = new DialogoParametroAG();
	private OpcionesGenetico opciones = new OpcionesGenetico(); // @jve:decl-index=0:
	private GraficadorDLG grafica = new GraficadorDLG();
	public DialogoProgreso progreso = new DialogoProgreso(this);
	public ParametrosSalida salida = new ParametrosSalida(); // @jve:decl-index=0:
	public ParametrosEntrada entrada = new ParametrosEntrada(); // @jve:decl-index=0:
	//
	private double muestra[];
	private boolean parametrosPorventana = false;
	private double probcruce = 0.5;
	private double probmuta = 0.025;
	private int pobla = 50;
	private int generac = 10000;
	private double errMom = 1e-15;
	private double errMax = 1e-15;
	private double errPerc = 1e-15;
	private double max = 2; // espacio de busqueda
	private double min = -0.2499;
	//
	private String fileName;
	private FileDialog fileChooser = null; // @jve:decl-index=0:visual-constraint="1091,194"
	private boolean primeravez=true;
	//
	private static final int MOMENTOS=1;	
	private static final int MAXVEROSIMILITUD=2;
	private static final int PERCENTILES=3;

	/**
	 * constructor: para un espacio de busqueda por defecto
	 */
	public EstandarxDLG(JFrame prin) {
		super();
		entrada.ProbCruce = 0.6;
		entrada.ProbMutacion = 0.1;
		entrada.poblacion = 100;
		entrada.generaciones = 10000;
		entrada.ErrorEsperado = 1.0E-15;
		entrada.metodo = MOMENTOS; // momentos
		initialize();
		ventanaPrincipal=prin;
	}
	
	public EstandarxDLG() {
		super();
		entrada.ProbCruce = 0.6;
		entrada.ProbMutacion = 0.1;
		entrada.poblacion = 100;
		entrada.generaciones = 10000;
		entrada.ErrorEsperado = 1.0E-15;
		entrada.metodo = MOMENTOS; // momentos
		initialize();
	}

	// cuando se especifica el espacio de busqueda
	public EstandarxDLG(double min, double max) {
		super();
		this.min = min;
		this.max = max;
		initialize();
		jTextInferior.setText(Double.toString(min));
		jTextSuperior.setText(Double.toString(max));
		jTextInferiorx.setText(Double.toString(min));
		jTextSuperiorx.setText(Double.toString(max));
		jTextInferiorp.setText(Double.toString(min));
		jTextSuperiorp.setText(Double.toString(max));
		entrada.ProbCruce = 0.6;
		entrada.ProbMutacion = 0.1;
		entrada.poblacion = 100;
		entrada.generaciones = 10000;
		entrada.ErrorEsperado = 1.0E-15;
		entrada.metodo = MOMENTOS; // momentos
	}

	/**
	 * lee la muestra del TextArea
	 * @return true si se pudo leer correctamente
	 */
	public boolean leerDatos() {
		try {
			String t=null;
			if (jTabbedPane.getSelectedIndex()==0) {
				t = txtMuestraMom.getText();
			}
			else if (jTabbedPane.getSelectedIndex()==1) {
				t = txtMuestraMaxVer.getText();
			}
			else if (jTabbedPane.getSelectedIndex()==2) {
				t = txtMuestraPerc.getText();
			}
			String[] datos = t.split("\n");
			muestra = new double[datos.length];

			for (int i = 0; i < datos.length; i++) {
				muestra[i] = Double.parseDouble(datos[i]);
			}
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, "Error: " + e.getMessage(), "Error",
					JOptionPane.ERROR_MESSAGE);
			return false;
		}
		return true;
	}

	/**
	 * lee la muestra de un archivo
	 */
	public void abrirArchivo() {
		// Si no existe el file chooser, crea uno

		if (fileChooser == null) {
			try {
				fileChooser = new FileDialog(ventanaPrincipal,"Leer Muestra de archivo");
			} catch (AccessControlException ace) {
				JOptionPane.showMessageDialog(this, "Error:\n" + ace.getMessage(), "Error",
						JOptionPane.ERROR_MESSAGE);
			}
		}
		// Valor que retorna al elegir una opcion en el file chooser
		fileChooser.setVisible(true);

/*		// Si se escogio Ok, (o abrir)
		if (retVal == JFileChooser.APPROVE_OPTION) {
			if (jTabbedPane.getSelectedIndex()==0)
				txtMuestraMom.setText("");
			else if (jTabbedPane.getSelectedIndex()==1)
				txtMuestraMaxVer.setText("");
			else if (jTabbedPane.getSelectedIndex()==2)
				txtMuestraPerc.setText("");
*/
		// El path absoluto del archivo elegido
		fileName = fileChooser.getDirectory()+fileChooser.getFile();
		if(fileName!=null && !fileName.equals("") && fileChooser.getFile()!=null){
			try {
				RandomAccessFile archivo = new RandomAccessFile(fileName, "r");
				String temp;
				StringBuffer text = new StringBuffer();
				int i = 0;

				while (i <= archivo.length()) {
					temp = archivo.readLine();
					if (temp != null) {
						text.append(temp);
						text.append("\n");
					}
					i++;
				}

				if (jTabbedPane.getSelectedIndex()==0)
					txtMuestraMom.setText(text.toString());

				else if (jTabbedPane.getSelectedIndex()==1)
					txtMuestraMaxVer.setText(text.toString());

				else if (jTabbedPane.getSelectedIndex()==2)
					txtMuestraPerc.setText(text.toString());
				archivo.close();
			} catch (Exception ioe) {
				JOptionPane.showMessageDialog(this, "Error al abrir el archivo: "+ioe.getMessage(),
						"Error", JOptionPane.ERROR_MESSAGE);
			}
		}
	}

	/**
	 * cuaro de dialogo parametros AG
	 */
	public void mostrarOpcionesAg() {
		d.setVisible(true);
		parametrosPorventana = true;
	}

	public void graficar() {
		double l1 = 0;
		double l2 = 0;
		double l3 = 0;
		double l4 = 0;

		try {
		if (jTabbedPane.getSelectedIndex()==0) {
			l1 = Double.parseDouble(txtmomLa1.getText());
			l2 = Double.parseDouble(txtmomLa2.getText());
			l3 = Double.parseDouble(txtmomLa3.getText());
			l4 = Double.parseDouble(txtmomLa4.getText());
			grafica.graficar("Momentos",l1, l2, l3, l4);
		}
		else if (jTabbedPane.getSelectedIndex()==1) {
			l1 = Double.parseDouble(txtmaxverLa1.getText());
			l2 = Double.parseDouble(txtmaxverLa2.getText());
			l3 = Double.parseDouble(txtmaxverLa3.getText());
			l4 = Double.parseDouble(txtmaxverLa4.getText());
			grafica.graficar("Maxima Veros.",l1, l2, l3, l4);
		}
		else if (jTabbedPane.getSelectedIndex()==2) {
			l1 = Double.parseDouble(txtPercLa1.getText());
			l2 = Double.parseDouble(txtPercLa2.getText());
			l3 = Double.parseDouble(txtPercLa3.getText());
			l4 = Double.parseDouble(txtPercLa4.getText());
			grafica.graficar("Percentiles",l1, l2, l3, l4);
		}

		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, "Valores Lambdas no validos:\n"+e.getMessage(),
					"Error", JOptionPane.ERROR_MESSAGE);
		}

		grafica.setVisible(true);
	}

	/**
	 * EJECUCION procedimiento desde la GUI
	 * @return true si se pudo ejecutar correctamente
	 */
	public boolean ejecutarGUI() {
		/*
		 * Verifica que ya este en la BD
		 * y asi no hacer todo el procedimiento
		 */
		/*
		 if (ConsultarBD(entrada.muestra, entrada.metodo, entrada.ErrorEsperado, entrada.poblacion, entrada.generaciones, entrada.ProbMutacion, entrada.ProbCruce)) {
		 	return;
		 }
		 */
		
		
		if(primeravez){ 
			if (entrada.metodo==1)
				jTabbedPane.setSelectedIndex(0);
				
			if (entrada.metodo==2)
				jTabbedPane.setSelectedIndex(1);
				
			if (entrada.metodo==3)
				jTabbedPane.setSelectedIndex(2);
			primeravez=false;
			}	
		
		
		
		// Si la muestra fue pasada como parametro la muestra en la interfaz
		if(parametrosPorventana){
			opciones=d.DevolverOpciones();
			
			pobla=opciones.poblacion;
			generac=opciones.generaciones;
			probcruce=opciones.ProbCruce;
			probmuta=opciones.ProbMutacion;
			errMom=opciones.errorMaxDeMomentos;
			errMax=opciones.errorMaxDeMaxVeros;
			errPerc=opciones.errorMaxDePercentiles;
					
			}

		
		
		if (jTabbedPane.getSelectedIndex()==0){
			try {
				min = Double.parseDouble(jTextInferior.getText());
				max = Double.parseDouble(jTextSuperior.getText());
			} catch (NumberFormatException e) {
				JOptionPane.showMessageDialog(this,"Valores no numericos en Espacio de busqueda","Error", JOptionPane.ERROR_MESSAGE);
				return false;
			}
			if (min < -0.25) {
				JOptionPane.showMessageDialog(this,"Limite inferior debe ser mayor que -0.25","Error en limite", JOptionPane.ERROR_MESSAGE);
				return false;
			}
			// usar de nuevo el moduloDLG
			moduloDLG.minimo = min;
			moduloDLG.maximo = max;
			moduloDLG.primeravez = false; //arregla conflicto con  un bug cuando se ejcuta por primera vez desde GUI y no por codigo
			if(seleccionMuestraMom.isSelected()){
				//lee muestra de textArea
				if (!leerDatos()) {return false;}
				moduloDLG.evaluar(muestra,MOMENTOS, errMom, pobla, generac, probmuta,probcruce);//<--
			}else{
				//llama el metodo con los momentos ingresados
				try {
					moduloDLG.evaluarApartirDeMomentosEstad(
							Double.parseDouble(getJTextMedia().getText()),
							Double.parseDouble(getJTextVarianza().getText()),
							Double.parseDouble(getJTextApuntamiento().getText()),
							Double.parseDouble(getJTextSimetria().getText()),
							errMom,pobla,generac,probmuta,probcruce);//<--
				} catch (NumberFormatException e) {
					JOptionPane.showMessageDialog(this,"Verifique que los valores de los momentos sean numeros reales.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return false;
				} catch (Exception e) {
					JOptionPane.showMessageDialog(this,"Ocurrio un error.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return false;
				}
			}
		}
		else if (jTabbedPane.getSelectedIndex()==1){
			jTabbedPane.setSelectedIndex(1);
			if (!leerDatos()) {return false;}
			try {
				min = Double.parseDouble(jTextInferiorx.getText());
				max = Double.parseDouble(jTextSuperiorx.getText());
			} catch (NumberFormatException e) {
				JOptionPane.showMessageDialog(this,"Valores no numericos en Espacio de busqueda","Error", JOptionPane.ERROR_MESSAGE);
				return false;
			}
			// usar de nuevo el moduloDLG
			moduloDLG.minimo = min;
			moduloDLG.maximo = max;
			moduloDLG.primeravez = false; //arregla conflicto con  un bug cuando se ejcuta por primera vez desde GUI y no por codigo
			moduloDLG.evaluar(muestra, MAXVEROSIMILITUD, errMax, pobla, generac, probmuta,probcruce);
		}	
		else if (jTabbedPane.getSelectedIndex()==2){
			jTabbedPane.setSelectedIndex(2);
			try {			
				min = Double.parseDouble(jTextInferiorp.getText());
				max = Double.parseDouble(jTextSuperiorp.getText());
			} catch (NumberFormatException e) {
				JOptionPane.showMessageDialog(this,"Valores no numericos en Espacio de busqueda","Error", JOptionPane.ERROR_MESSAGE);
				return false;
			}
			// usar de nuevo el moduloDLG
			moduloDLG.minimo = min;
			moduloDLG.maximo = max;
			moduloDLG.primeravez = false; //arregla conflicto con  un bug cuando se ejcuta por primera vez desde GUI y no por codigo
			if(seleccionMuestraPerc.isSelected()){
				//lee muestra de textArea
				if (!leerDatos()) {return false;}
				moduloDLG.evaluar(muestra, PERCENTILES, errPerc, pobla, generac, probmuta,probcruce);
			}else{
				//llama el metodo con los estadisticos ingresados
				try {
					moduloDLG.evaluarApartirDeEstadPercentiles(
							Double.parseDouble(getJTextMedianap().getText()),
							Double.parseDouble(getJTextInterDecilp().getText()),
							Double.parseDouble(getJTextTasaPCp().getText()),
							Double.parseDouble(getJTextFactorPCp().getText()),
							errPerc,pobla,generac,probmuta,probcruce);//<--
				} catch (NumberFormatException e) {
					JOptionPane.showMessageDialog(this,"Verifique que los valores de los 4 estadisticos sean numeros reales.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return false;
				} catch (Exception e) {
					JOptionPane.showMessageDialog(this,"Ocurrio un error.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return false;
				}
			}
		}
		return true;
		
	}

	/**
	 * ejecucion desde otro procedimiento (por otro modulo)
	 */
	public void ejecutar() {
		/*
		 * Verifica que ya este en la BD
		 * y asi no hacer todo el procedimiento
		 */
		/*
		 if (ConsultarBD(entrada.muestra, entrada.metodo, entrada.ErrorEsperado, entrada.poblacion, entrada.generaciones, entrada.ProbMutacion, entrada.ProbCruce)) {
		 	return;
		 }
		 */
		
		if(primeravez){ 
			if (entrada.metodo==1)
				jTabbedPane.setSelectedIndex(0);
				
			if (entrada.metodo==2)
				jTabbedPane.setSelectedIndex(1);
				
			if (entrada.metodo==3)
				jTabbedPane.setSelectedIndex(2);
			primeravez=false;
			}	
		
		
		
		// Si la muestra fue pasada como parametro la muestra en la interfaz
		if(parametrosPorventana){
			opciones=d.DevolverOpciones();
			pobla=opciones.poblacion;
			generac=opciones.generaciones;
			probcruce=opciones.ProbCruce;
			probmuta=opciones.ProbMutacion;
			errMom=opciones.errorMaxDeMomentos;
			errMax=opciones.errorMaxDeMaxVeros;
			errPerc=opciones.errorMaxDePercentiles;
		}

		
		
		
		if (jTabbedPane.getSelectedIndex()==0){
			try {
				min = Double.parseDouble(jTextInferior.getText());
				max = Double.parseDouble(jTextSuperior.getText());
			} catch (NumberFormatException e) {
				JOptionPane.showMessageDialog(this,"Valores no numericos en Espacio de busqueda","Error", JOptionPane.ERROR_MESSAGE);
				return;
			}
			if (min < -0.25) {
				JOptionPane.showMessageDialog(this,"Limite inferior debe ser mayor que -0.25","Error en limite", JOptionPane.ERROR_MESSAGE);
				return;
			}
			// usar de nuevo el moduloDLG
			moduloDLG.minimo = min;
			moduloDLG.maximo = max;

			if(seleccionMuestraMom.isSelected()){
				//lee muestra de textArea
				if (!leerDatos()) {return;}
				moduloDLG.evaluar(muestra,MOMENTOS, errMom, pobla, generac, probmuta,probcruce);//<--
			}else{
				//llama el metodo con los momentos ingresados
				try {
					moduloDLG.evaluarApartirDeMomentosEstad(
							Double.parseDouble(getJTextMedia().getText()),
							Double.parseDouble(getJTextVarianza().getText()),
							Double.parseDouble(getJTextApuntamiento().getText()),
							Double.parseDouble(getJTextSimetria().getText()),
							errMom,pobla,generac,probmuta,probcruce);//<--
				} catch (NumberFormatException e) {
					JOptionPane.showMessageDialog(this,"Verifique que los valores de los momentos sean numeros reales.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return;
				} catch (Exception e) {
					JOptionPane.showMessageDialog(this,"Ocurrio un error.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return;
				}
			}
		}
		else if (jTabbedPane.getSelectedIndex()==1){
			jTabbedPane.setSelectedIndex(1);
			if (!leerDatos()) {return;}
			try {
				min = Double.parseDouble(jTextInferiorx.getText());
				max = Double.parseDouble(jTextSuperiorx.getText());
			} catch (NumberFormatException e) {
				JOptionPane.showMessageDialog(this,"Valores no numericos en Espacio de busqueda","Error", JOptionPane.ERROR_MESSAGE);
				return;
			}
			// usar de nuevo el moduloDLG
			moduloDLG.minimo = min;
			moduloDLG.maximo = max;

			moduloDLG.evaluar(muestra, MAXVEROSIMILITUD, errMax, pobla, generac, probmuta,probcruce);
		}	
		else if (jTabbedPane.getSelectedIndex()==2){
			jTabbedPane.setSelectedIndex(2);
			try {			
				min = Double.parseDouble(jTextInferiorp.getText());
				max = Double.parseDouble(jTextSuperiorp.getText());
			} catch (NumberFormatException e) {
				JOptionPane.showMessageDialog(this,"Valores no numericos en Espacio de busqueda","Error", JOptionPane.ERROR_MESSAGE);
				return;
			}
			// usar de nuevo el moduloDLG
			moduloDLG.minimo = min;
			moduloDLG.maximo = max;

			if(seleccionMuestraPerc.isSelected()){
				//lee muestra de textArea
				if (!leerDatos()) {return;}
				moduloDLG.evaluar(muestra, PERCENTILES, errPerc, pobla, generac, probmuta,probcruce);
			}else{
				//llama el metodo con los estadisticos ingresados
				try {
					moduloDLG.evaluarApartirDeEstadPercentiles(
							Double.parseDouble(getJTextMedianap().getText()),
							Double.parseDouble(getJTextInterDecilp().getText()),
							Double.parseDouble(getJTextTasaPCp().getText()),
							Double.parseDouble(getJTextFactorPCp().getText()),
							errPerc,pobla,generac,probmuta,probcruce);//<--
				} catch (NumberFormatException e) {
					JOptionPane.showMessageDialog(this,"Verifique que los valores de los 4 estadisticos sean numeros reales.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return;
				} catch (Exception e) {
					JOptionPane.showMessageDialog(this,"Ocurrio un error.\n"+e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
					return;
				}
			}
		}
		
		salida = (ParametrosSalida)moduloDLG.ObtenerResultadosEnObjeto();
	}

	
	public void ponerParametros(Object parametros,int origen) {
		entrada=(ParametrosEntrada) parametros;

		muestra=entrada.muestra;
		probmuta=entrada.ProbMutacion;
		probcruce=entrada.ProbCruce;
		generac=entrada.generaciones;
		pobla= entrada.poblacion;
		errMom=entrada.ErrorEsperado;
		errMax=entrada.ErrorEsperado;
		errPerc=entrada.ErrorEsperado;

		StringBuffer text=new StringBuffer();
		for ( int i=0;i<muestra.length;i++){
			text.append(muestra[i]);
			text.append("\n");
		}

		if(entrada.metodo==MOMENTOS)
			txtMuestraMom.setText(text.toString());
		else if(entrada.metodo==MAXVEROSIMILITUD)
			txtMuestraMaxVer.setText(text.toString());
		else if(entrada.metodo==PERCENTILES)
			txtMuestraPerc.setText(text.toString());
	}

	public Object obtenerResultados() {
		return (Object)salida;
	}

	public boolean consultarBD(double[] muestras, int metodo, double erroresperado,
			int poblacion,int generaciones,double probmutacion,double probcruce){

		/*	Pseudocodigo del proceso a seguir 

	 SELECCIONAR (lambda1, lambda2, lambda3, lambda4, ErrorCalculado)DE TABLA
	 DONDE (
	 muestras = tabla.muestra AND
	 metodo	 =	tabla.metodo AND
	 erroresperado = tabla.errorcalculado AND
	 poblacion = tabla.poblacion AND
	 generaciones = tabla.generaciones AND
	 probmutacion = tabla.probmutacion AND
	 probcruce = tabla.probcruce )

	//Si la consulta es valida, entonces obtener esos los lambdas
	//y el error ya guardados y generados por la colsulta anterior

	salida.lambda1=lambda1;
	salida.lambda2=lambda2;
	salida.lambda3=lambda3;
	salida.lambda4=lambda4;
	salida.error=ErrorCalculado;

	 return true;	 
		 */
		return false;
	}

	public void guardarBD(double[] muestras,double lambda1,double lambda2,double lambda3,
			double lambda4, int metodo, double errorcalculado,
			int poblacion,int generaciones,double probmutacion,double probcruce){

		// Pseudocodigo del proceso a seguir en SQL
		/*
		INSERTAR EN TABLA(muestras,lambda1,lambda2,lambda3,lambda4,metodo,errorcalculado,poblacion,generaciones,probmutacion,probcruce) 
		 */
	}

	////////////////////////////////////////////////////////////////////////
	// Procedimientos para la parte grafica
	////////////////////////////////////////////////////////////////////////

	private static final long serialVersionUID = 1L;
	private JTabbedPane jTabbedPane = null;
	private JPanel panel1 = null;
	private JPanel Panel2 = null;
	private JPanel Panel3 = null;
	private JScrollPane jScrollPane = null;
	private JLabel jLabel6 = null;
	private JLabel jLabel7 = null;
	private JLabel jLabel8 = null;
	private JLabel jLabel9 = null;
	public JTextField jTextApuntamiento = null;
	public JTextField jTextSimetria = null;
	public JTextField jTextVarianza = null;
	public JTextField jTextMedia = null;
	private JLabel jLabel10 = null;
	public JTextField jTextError3 = null;
	public JTextField jTextError4 = null;
	private JLabel jLabel11 = null;
	private JLabel jLabel12 = null;
	public JTextField txtmomLa1 = null;
	private JLabel jLabel13 = null;
	public JTextField txtmomLa2 = null;
	private JLabel jLabel14 = null;
	public JTextField txtmomLa3 = null;
	private JLabel jLabel15 = null;
	public JTextField txtmomLa4 = null;
	public JTextArea txtMuestraMom = null;
	private JLabel jLabel1 = null;
	public JTextField jTextInferior = null;
	private JLabel jLabel2 = null;
	public JTextField jTextSuperior = null;
	private JLabel jLabel3 = null;
	private JLabel jLabelx = null;
	private JScrollPane jScrollPanex = null;
	private JLabel jLabel12x = null;
	public JTextField txtmaxverLa1 = null;
	private JLabel jLabel13x = null;
	public JTextField txtmaxverLa2 = null;
	private JLabel jLabel14x = null;
	public JTextField txtmaxverLa3 = null;
	private JLabel jLabel15x = null;
	public JTextField txtmaxverLa4 = null;
	private JLabel titulox = null;
	public JTextArea txtMuestraMaxVer = null;
	public JTextField jTextInferiorx = null;
	private JLabel jLabel1x = null;
	public JTextField jTextSuperiorx = null;
	private JScrollPane jScrollPanep = null;
	private JLabel jLabel6p = null;
	private JLabel jLabel7p = null;
	private JLabel jLabel8p = null;
	private JLabel jLabel9p = null;
	public JTextField jTextFactorPCp = null;
	public JTextField jTextTasaPCp = null;
	public JTextField jTextInterDecilp = null;
	public JTextField jTextMedianap = null;
	public JTextField jTextError3p = null;
	public JTextField jTextError4p = null;
	private JLabel jLabel11p = null;
	private JLabel jLabel12p = null;
	public JTextField txtPercLa1 = null;
	private JLabel jLabel13p = null;
	public JTextField txtPercLa2 = null;
	private JLabel jLabel14p = null;
	public JTextField txtPercLa3 = null;
	private JLabel jLabel15p = null;
	public JTextField txtPercLa4 = null;
	public JTextArea txtMuestraPerc = null;
	private JLabel jLabel1p = null;
	public JTextField jTextInferiorp = null;
	private JLabel jLabel2p = null;
	public JTextField jTextSuperiorp = null;
	private JLabel jLabel3p = null;
	private JToolBar jJToolBarBar = null;
	private JButton jBAbrirM = null;
	private JButton jBGuardarM = null;
	private JButton jBEjecutarM = null;
	private JButton jBGraficarM = null;
	private JButton jBParametrosAgM = null;
	private JToolBar jJToolBarBar1 = null;
	private JButton jBAbrirMax = null;
	private JButton jBGuardarMax = null;
	private JButton jBEjecutarMax = null;
	private JButton jBGraficarMax = null;
	private JButton jBParametrosAgMax = null;
	private JToolBar jJToolBarBar2 = null;
	private JButton jBAbrirP = null;
	private JButton jBGuardarP = null;
	private JButton jBEjecutarP = null;
	private JButton jBGraficarP = null;
	private JButton jBParametrosAgP = null;
	private JRadioButton seleccionMuestraMom = null;
	private JRadioButton seleccionMomentos = null;
	private ButtonGroup grupomom = null;  //  @jve:decl-index=0:visual-constraint="623,107"
	private JButton btnValorCriticoMaxVer = null;
	private JTextField txtSignificanciaMom = null;
	private JTextField txtValorCriticoMom = null;
	private JLabel jLabel = null;
	private JLabel jLabel4 = null;
	private JTextField txtSignificanciaMaxVer = null;
	private JTextField txtValorCriticoMaxVer = null;
	private JRadioButton seleccionMuestraPerc = null;
	private JLabel labelperc = null;
	private JRadioButton seleccionEstadPerc = null;
	private JLabel jLabel5 = null;
	private JTextField txtSignificanciaPerc = null;
	private JTextField txtValorCriticoPerc = null;
	private JButton btnValorCriticoPerc = null;
	private JButton btnValorCriticoMom = null;
	private ButtonGroup grupoPerc;
	private JTextField jTexteErrorMaxVer = null;
	private JLabel jLabel16 = null;

	/**
	 * inicializa toda la GUI
	 */
	private void initialize() {
		GridBagConstraints gridBagConstraints = new GridBagConstraints();
		gridBagConstraints.fill = GridBagConstraints.BOTH;
		gridBagConstraints.gridy = 0;
		gridBagConstraints.weightx = 1.0;
		gridBagConstraints.weighty = 1.0;
		gridBagConstraints.gridwidth = 1;
		gridBagConstraints.gridx = 0;
		this.setSize(596, 423);
		this.setLayout(new GridBagLayout());
		this.add(getJTabbedPane(), gridBagConstraints);
	}

	private JTabbedPane getJTabbedPane() {
		if (jTabbedPane == null) {
			jTabbedPane = new JTabbedPane();
			jTabbedPane.addTab("Momentos", null, getPanel1(),
			"metodo a utilizar");
			jTabbedPane.addTab("Maxima Verosimilitud", null, getPanel2(),
			"metodo a utilizar");
			jTabbedPane.addTab("Percentiles", null, getPanel3(),
			"metodo a utilizar");
		}
		return jTabbedPane;
	}

	public JScrollPane getJScrollPanex() {
		if (jScrollPanex == null) {
			jScrollPanex = new JScrollPane();
			jScrollPanex.setBounds(15, 75, 173, 268);
			jScrollPanex
			.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
			jScrollPanex
			.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
			jScrollPanex.setViewportView(getTxtMuestraMaxVer());
		}
		return jScrollPanex;
	}

	private JRadioButton getSeleccionMuestraMom() {
		if (seleccionMuestraMom == null) {
			seleccionMuestraMom = new JRadioButton();
			seleccionMuestraMom.setBounds(new Rectangle(15, 46, 167, 22));
			seleccionMuestraMom.setText("Especificar Muestra");
			seleccionMuestraMom.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					activarComponentesMomentos(!getSeleccionMuestraMom().isSelected());
					txtMuestraMom.setEnabled(getSeleccionMuestraMom().isSelected());
				}
			});

		}
		return seleccionMuestraMom;
	}

	private JRadioButton getSeleccionMomentos() {
		if (seleccionMomentos == null) {
			seleccionMomentos = new JRadioButton();
			seleccionMomentos.setBounds(new Rectangle(191, 45, 242, 22));
			seleccionMomentos.setText("Especificar valores de los Momentos");
			seleccionMomentos.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					activarComponentesMomentos(getSeleccionMomentos().isSelected());
					txtMuestraMom.setEnabled(!getSeleccionMomentos().isSelected());
				}
			});
		}
		return seleccionMomentos;
	}

	protected void activarComponentesMomentos(boolean b) {
		jLabel10.setEnabled(b);
		getJTextSimetria().setEnabled(b);
		getJTextApuntamiento().setEnabled(b);
		getJTextMedia().setEnabled(b);
		getJTextVarianza().setEnabled(b);
	}

	private JButton getBtnValorCriticoMaxVer() {
		if (btnValorCriticoMaxVer == null) {
			btnValorCriticoMaxVer = new JButton();
			btnValorCriticoMaxVer = new JButton("x =");
			btnValorCriticoMaxVer.setBounds(new Rectangle(370, 318, 51, 19));
			btnValorCriticoMaxVer.setToolTipText("Calcular valor critico");
			btnValorCriticoMaxVer.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e) {
					double alfa=0;
					double x=0;
					try {
						alfa=Double.parseDouble(txtSignificanciaMaxVer.getText());
						x=moduloDLG.calcularValorCritico(alfa, 
								Double.parseDouble(txtmaxverLa1.getText()),
								Double.parseDouble(txtmaxverLa2.getText()),
								Double.parseDouble(txtmaxverLa3.getText()),
								Double.parseDouble(txtmaxverLa4.getText()));
						txtValorCriticoMaxVer.setText(String.valueOf(x));
					} catch (Exception exc){
						txtValorCriticoMaxVer.setText("0.0");
					}
				}});
		}
		return btnValorCriticoMaxVer;
	}

	private JTextField getTxtSignificanciaMom() {
		if (txtSignificanciaMom == null) {
			txtSignificanciaMom = new JTextField();
			txtSignificanciaMom.setBounds(new Rectangle(312, 369, 68, 20));
		}
		return txtSignificanciaMom;
	}

	private JTextField getTxtValorCriticoMom() {
		if (txtValorCriticoMom == null) {
			txtValorCriticoMom = new JTextField();
			txtValorCriticoMom.setBounds(new Rectangle(445, 369, 142, 20));
		}
		return txtValorCriticoMom;
	}

	private JTextField getTxtSignificanciaMaxVer() {
		if (txtSignificanciaMaxVer == null) {
			txtSignificanciaMaxVer = new JTextField();
			txtSignificanciaMaxVer.setBounds(new Rectangle(308, 319, 56, 20));
		}
		return txtSignificanciaMaxVer;
	}

	private JTextField getTxtValorCriticoMaxVer() {
		if (txtValorCriticoMaxVer == null) {
			txtValorCriticoMaxVer = new JTextField();
			txtValorCriticoMaxVer.setBounds(new Rectangle(427, 318, 152, 20));
		}
		return txtValorCriticoMaxVer;
	}

	private JRadioButton getSeleccionMuestraPerc() {
		if (seleccionMuestraPerc == null) {
			seleccionMuestraPerc = new JRadioButton();
			seleccionMuestraPerc.setBounds(new Rectangle(17, 49, 165, 19));
			seleccionMuestraPerc.setText("Especificar Muestra");
			seleccionMuestraPerc.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					activarComponentesPerc(!getSeleccionMuestraPerc().isSelected());
					txtMuestraPerc.setEnabled(getSeleccionMuestraPerc().isSelected());
				}
			});
		}
		return seleccionMuestraPerc;
	}

	protected void activarComponentesPerc(boolean b) {
		labelperc.setEnabled(b);
		getJTextMedianap().setEnabled(b);
		getJTextInterDecilp().setEnabled(b);
		getJTextFactorPCp().setEnabled(b);
		getJTextTasaPCp().setEnabled(b);
	}

	private JRadioButton getSeleccionEstadPerc() {
		if (seleccionEstadPerc == null) {
			seleccionEstadPerc = new JRadioButton();
			seleccionEstadPerc.setBounds(new Rectangle(208, 49, 252, 20));
			seleccionEstadPerc.setText("Especificar valores de los estadisiticos");
			seleccionEstadPerc.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					activarComponentesPerc(getSeleccionEstadPerc().isSelected());
					txtMuestraPerc.setEnabled(!getSeleccionEstadPerc().isSelected());
				}
			});
		}
		return seleccionEstadPerc;
	}

	private JTextField getTxtSignificanciaPerc() {
		if (txtSignificanciaPerc == null) {
			txtSignificanciaPerc = new JTextField();
			txtSignificanciaPerc.setBounds(new Rectangle(308, 362, 66, 20));
		}
		return txtSignificanciaPerc;
	}

	private JButton getBtnValorCriticoPerc() {
		if (btnValorCriticoPerc == null) {
			btnValorCriticoPerc = new JButton();
			btnValorCriticoPerc.setText("x =");
			btnValorCriticoPerc.setBounds(new Rectangle(379, 362, 53, 19));
			btnValorCriticoPerc.setToolTipText("Calcular valor critico");

			btnValorCriticoPerc.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e) {
					double alfa=0;
					double x=0;
					try {
						alfa=Double.parseDouble(txtSignificanciaPerc.getText());
						x=moduloDLG.calcularValorCritico(alfa, 
								Double.parseDouble(txtPercLa1.getText()),
								Double.parseDouble(txtPercLa2.getText()),
								Double.parseDouble(txtPercLa3.getText()),
								Double.parseDouble(txtPercLa4.getText()));
						txtValorCriticoPerc.setText(String.valueOf(x));
					} catch (Exception exc) {
						txtValorCriticoPerc.setText("0.0");
					}
				}
			});
		}
		return btnValorCriticoPerc;
	}

	private JTextField getTxtValorCriticoPerc() {
		if (txtValorCriticoPerc == null) {
			txtValorCriticoPerc = new JTextField();
			txtValorCriticoPerc.setBounds(new Rectangle(437, 362, 147, 20));
		}
		return txtValorCriticoPerc;
	}

	private JButton getBtnvalorCriticoMom() {
		if (btnValorCriticoMom == null) {
			btnValorCriticoMom = new JButton();
			btnValorCriticoMom.setBounds(new Rectangle(385, 369, 53, 19));
			btnValorCriticoMom.setText("x =");
			btnValorCriticoMom.setToolTipText("Calcular valor critico");
			btnValorCriticoMom.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e) {
					double alfa=0;
					double x=0;
					try {
						alfa=Double.parseDouble(txtSignificanciaMom.getText());
						x=moduloDLG.calcularValorCritico(alfa, 
								Double.parseDouble(txtmomLa1.getText()),
								Double.parseDouble(txtmomLa2.getText()),
								Double.parseDouble(txtmomLa3.getText()),
								Double.parseDouble(txtmomLa4.getText()));
						txtValorCriticoMom.setText(String.valueOf(x));
					} catch (Exception exc) {
						txtValorCriticoMom.setText("0.0");
					}
				}

			});
		}
		return btnValorCriticoMom;
	}

	public JTextField getTxtmaxverLa1() {
		if (txtmaxverLa1 == null) {
			txtmaxverLa1 = new JTextField();
			txtmaxverLa1.setBounds(314, 123, 200, 19);
		}
		return txtmaxverLa1;
	}

	public JTextField getTxtmaxverLa2() {
		if (txtmaxverLa2 == null) {
			txtmaxverLa2 = new JTextField();
			txtmaxverLa2.setBounds(314, 152, 200, 19);
		}
		return txtmaxverLa2;
	}

	public JTextField getTxtmaxverLa3() {
		if (txtmaxverLa3 == null) {
			txtmaxverLa3 = new JTextField();
			txtmaxverLa3.setBounds(314, 180, 200, 19);
		}
		return txtmaxverLa3;
	}

	public JTextField getTxtmaxverLa4() {
		if (txtmaxverLa4 == null) {
			txtmaxverLa4 = new JTextField();
			txtmaxverLa4.setBounds(314, 209, 200, 19);
		}
		return txtmaxverLa4;
	}

	public JLabel getJTextPanex() {
		if (titulox == null) {
			titulox = new JLabel();
			titulox.setText("Introduzca los valores de la muestra, un valor por linea. ");
			titulox.setBounds(new Rectangle(15, 7, 557, 20));
		}
		return titulox;
	}

	public JTextArea getTxtMuestraMaxVer() {
		if (txtMuestraMaxVer == null) {
			txtMuestraMaxVer = new JTextArea();
		}
		return txtMuestraMaxVer;
	}

	public JTextField getJTextInferiorx() {
		if (jTextInferiorx == null) {
			jTextInferiorx = new JTextField();
			jTextInferiorx.setBounds(new Rectangle(237, 78, 72, 19));
			jTextInferiorx.setText("-0.2499");
		}
		return jTextInferiorx;
	}

	public JTextField getJTextSuperiorx() {
		if (jTextSuperiorx == null) {
			jTextSuperiorx = new JTextField();
			jTextSuperiorx.setBounds(new Rectangle(444, 78, 73, 19));
			jTextSuperiorx.setText("2");
		}
		return jTextSuperiorx;
	}

	public JScrollPane getJScrollPanep() {
		if (jScrollPanep == null) {
			jScrollPanep = new JScrollPane();
			jScrollPanep.setBounds(15, 75, 173, 268);
			jScrollPanep
			.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
			jScrollPanep
			.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
			jScrollPanep.setViewportView(getTxtMuestraPerc());
		}
		return jScrollPanep;
	}

	public JTextField getJTextFactorPCp() {
		if (jTextFactorPCp == null) {
			jTextFactorPCp = new JTextField();
			jTextFactorPCp.setBounds(287, 184, 133, 19);
			jTextFactorPCp.setHorizontalAlignment(JTextField.LEFT);
			jTextFactorPCp
			.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		}
		return jTextFactorPCp;
	}

	public JTextField getJTextTasaPCp() {
		if (jTextTasaPCp == null) {
			jTextTasaPCp = new JTextField();
			jTextTasaPCp.setBounds(287, 159, 133, 19);
			jTextTasaPCp.setHorizontalAlignment(JTextField.LEFT);
			jTextTasaPCp
			.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		}
		return jTextTasaPCp;
	}

	public JTextField getJTextInterDecilp() {
		if (jTextInterDecilp == null) {
			jTextInterDecilp = new JTextField();
			jTextInterDecilp.setBounds(287, 136, 133, 19);
			jTextInterDecilp
			.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		}
		return jTextInterDecilp;
	}

	public JTextField getJTextMedianap() {
		if (jTextMedianap == null) {
			jTextMedianap = new JTextField();
			jTextMedianap.setBounds(287, 114, 133, 19);
			jTextMedianap
			.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		}
		return jTextMedianap;
	}

	public JTextField getJTextError3p() {
		if (jTextError3p == null) {
			jTextError3p = new JTextField();
			jTextError3p.setBounds(433, 161, 154, 19);
		}
		return jTextError3p;
	}

	public JTextField getJTextError4p() {
		if (jTextError4p == null) {
			jTextError4p = new JTextField();
			jTextError4p.setBounds(434, 183, 154, 19);
		}
		return jTextError4p;
	}

	public JTextField getTxtPercLa1() {
		if (txtPercLa1 == null) {
			txtPercLa1 = new JTextField();
			txtPercLa1.setBounds(300, 247, 200, 19);
		}
		return txtPercLa1;
	}

	public JTextField getTxtPercLa2() {
		if (txtPercLa2 == null) {
			txtPercLa2 = new JTextField();
			txtPercLa2.setBounds(300, 272, 200, 19);
		}
		return txtPercLa2;
	}

	public JTextField getTxtPercLa3() {
		if (txtPercLa3 == null) {
			txtPercLa3 = new JTextField();
			txtPercLa3.setBounds(300, 297, 200, 19);
		}
		return txtPercLa3;
	}

	public JTextField getTxtPercLa4() {
		if (txtPercLa4 == null) {
			txtPercLa4 = new JTextField();
			txtPercLa4.setBounds(300, 323, 200, 19);
		}
		return txtPercLa4;
	}

	public JTextArea getTxtMuestraPerc() {
		if (txtMuestraPerc == null) {
			txtMuestraPerc = new JTextArea();
		}
		return txtMuestraPerc;
	}

	public JTextField getJTextInferiorp() {
		if (jTextInferiorp == null) {
			jTextInferiorp = new JTextField();
			jTextInferiorp.setBounds(new Rectangle(228, 217, 62, 19));
			jTextInferiorp.setText("-0.2499");
		}
		return jTextInferiorp;
	}

	public JTextField getJTextSuperiorp() {
		if (jTextSuperiorp == null) {
			jTextSuperiorp = new JTextField();
			jTextSuperiorp.setBounds(new Rectangle(428, 217, 61, 19));
			jTextSuperiorp.setText("2");
		}
		return jTextSuperiorp;
	}

	public JPanel getPanel1() {
		if (panel1 == null) {
			panel1 = new JPanel();
			panel1.setLayout(null);
			panel1.setSize(577, 349);

			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(210, 369, 99, 18));
			jLabel.setText("Significancia \u03B1:");
			jLabel.setFont(new Font("Times New Roman", Font.BOLD, 14));
			jLabel15 = new JLabel();
			jLabel14 = new JLabel();
			jLabel13 = new JLabel();
			jLabel12 = new JLabel();
			jLabel11 = new JLabel();
			jLabel10 = new JLabel();
			jLabel9 = new JLabel();
			jLabel8 = new JLabel();
			jLabel7 = new JLabel();
			jLabel6 = new JLabel();
			jLabel3 = new JLabel("calculados por el algoritmo");
			jLabel3.setBounds(new Rectangle(434, 135, 159, 16));
			jLabel3.setFont(new Font("Dialog", Font.BOLD, 12));
			jLabel2 = new JLabel("< Espacio Busqueda <");
			jLabel2.setBounds(new Rectangle(301, 227, 136, 16));
			jLabel2.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel1 = new JLabel("Ingrese la muestra o bien los valores de los 4 estadisticos");
			jLabel1.setBounds(new Rectangle(15, 7, 557, 20));
			jLabel1.setFont(new Font("Dialog", Font.BOLD, 12));
			jLabel6.setBounds(205, 116, 52, 15);
			jLabel6.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel6.setText("Media:");
			jLabel7.setBounds(205, 137, 72, 15);
			jLabel7.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel7.setText("Varianza:");
			jLabel8.setBounds(205, 160, 63, 15);
			jLabel8.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel8.setText("Simetria:");
			jLabel9.setBounds(205, 184, 84, 15);
			jLabel9.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel9.setText("Apuntamiento:");
			jLabel10.setBounds(205, 84, 119, 24);
			jLabel10.setFont(new Font("Dialog", Font.BOLD, 12));
			jLabel10.setText("Datos Estadisticos");
			jLabel11.setBounds(446, 119, 127, 16);
			jLabel11.setFont(new Font("Dialog", Font.BOLD, 12));
			jLabel11.setText("Errores de los valores");
			jLabel12.setBounds(210, 269, 83, 15);
			jLabel12.setText("Lambda 1:");
			jLabel13.setBounds(210, 294, 84, 15);
			jLabel13.setText("Lambda 2:");
			jLabel14.setBounds(210, 318, 83, 15);
			jLabel14.setText("Lambda 3:");
			jLabel15.setBounds(210, 343, 83, 15);
			jLabel15.setText("Lambda 4:");
			panel1.add(jLabel6, null);
			panel1.add(jLabel7, null);
			panel1.add(jLabel8, null);
			panel1.add(jLabel9, null);
			panel1.add(jLabel10, null);
			panel1.add(jLabel11, null);
			panel1.add(jLabel12, null);
			panel1.add(jLabel13, null);
			panel1.add(jLabel14, null);
			panel1.add(jLabel15, null);
			panel1.add(jLabel1, null);
			panel1.add(jLabel2, null);
			panel1.add(jLabel3, null);
			panel1.add(jLabel, null);
			panel1.add(getJTextApuntamiento(), null);
			panel1.add(getJTextSimetria(), null);
			panel1.add(getJTextVarianza(), null);
			panel1.add(getJTextMedia(), null);
			panel1.add(getJScrollPane(), null);
			panel1.add(getJTextError3(), null);
			panel1.add(getJTextError4(), null);
			panel1.add(getTxtmomLa1(), null);
			panel1.add(getTxtmomLa2(), null);
			panel1.add(getTxtmomLa3(), null);
			panel1.add(getTxtmomLa4(), null);
			panel1.add(getJTextInferior(), null);
			panel1.add(getJTextSuperior(), null);
			panel1.add(getJJToolBarBar(), null);
			panel1.add(getSeleccionMuestraMom(), null);
			panel1.add(getSeleccionMomentos(), null);
			panel1.add(getTxtSignificanciaMom(), null);
			panel1.add(getTxtValorCriticoMom(), null);
			panel1.add(getBtnvalorCriticoMom(), null);
			grupomom = new ButtonGroup();
			grupomom.add(seleccionMomentos);
			grupomom.add(seleccionMuestraMom);
			grupomom.setSelected(seleccionMuestraMom.getModel(), true);
		}
		return panel1;
	}

	public JPanel getPanel2() {
		if (Panel2 == null) {
			jLabel16 = new JLabel();
			jLabel16.setBounds(new Rectangle(224, 245, 193, 15));
			jLabel16.setText("Error calculado por el algoritmo:");
			jLabel4 = new JLabel();
			jLabel4.setBounds(new Rectangle(209, 320, 95, 17));
			jLabel4.setText("Significancia \u03b1:");
			jLabel4.setFont(new Font("Times New Roman", Font.BOLD, 14));
			Panel2 = new JPanel();
			jLabel1x = new JLabel();
			jLabel1x.setBounds(new Rectangle(314, 77, 127, 20));
			jLabel1x.setText("<Espacio Busqueda<");
			jLabel15x = new JLabel();
			jLabel14x = new JLabel();
			jLabel13x = new JLabel();
			jLabel12x = new JLabel();

			jLabelx = new JLabel();
			Panel2.setLayout(null);
			Panel2.setSize(508, 329);

			jLabelx.setBounds(new Rectangle(15, 46, 167, 22));
			jLabelx.setText("Muestras de la variable");
			jLabel12x.setBounds(224, 125, 83, 15);			//(210, 269, 83, 15);
			jLabel12x.setText("Lambda 1:");
			jLabel13x.setBounds(224, 154, 83, 15);
			jLabel13x.setText("Lambda 2:");
			jLabel14x.setBounds(224, 181, 83, 15);
			jLabel14x.setText("Lambda 3:");
			jLabel15x.setBounds(224, 211, 83, 15);
			jLabel15x.setText("Lambda 4:");
			Panel2.add(jLabelx, null);
			Panel2.add(getJScrollPanex(), null);
			Panel2.add(jLabel12x, null);
			Panel2.add(getTxtmaxverLa1(), null);
			Panel2.add(jLabel13x, null);
			Panel2.add(getTxtmaxverLa2(), null);
			Panel2.add(jLabel14x, null);
			Panel2.add(getTxtmaxverLa3(), null);
			Panel2.add(jLabel15x, null);
			Panel2.add(getTxtmaxverLa4(), null);
			Panel2.add(getJTextPanex(), null);
			Panel2.add(getJTextInferiorx(), null);
			Panel2.add(jLabel1x, null);
			Panel2.add(getJTextSuperiorx(), null);
			Panel2.add(getJJToolBarBar1(), null);
			Panel2.add(jLabel4, null);
			Panel2.add(getTxtSignificanciaMaxVer(), null);
			Panel2.add(getBtnValorCriticoMaxVer(), null);
			Panel2.add(getTxtValorCriticoMaxVer(), null);
			Panel2.add(getJTexteErrorMaxVer(), null);
			Panel2.add(jLabel16, null);
		}
		return Panel2;
	}

	public JPanel getPanel3() {
		if (Panel3 == null) {
			jLabel5 = new JLabel();
			jLabel5.setBounds(new Rectangle(209, 362, 95, 17));
			jLabel5.setText("Significancia \u03b1:");
			jLabel5.setFont(new Font("Times New Roman", Font.BOLD, 14));
			labelperc = new JLabel();
			labelperc.setBounds(new Rectangle(210, 83, 112, 16));
			labelperc.setText("Datos Estadisticos");
			labelperc.setFont(new Font("Dialog", Font.BOLD, 12));
			Panel3 = new JPanel();
			jLabel3p = new JLabel();
			jLabel3p.setBounds(new Rectangle(430, 137, 161, 16));
			jLabel3p.setText("calculados por el algoritmo");
			jLabel2p = new JLabel();
			jLabel2p.setBounds(new Rectangle(295, 219, 123, 16));
			jLabel2p.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel2p.setText("<Espacio Busqueda<");
			jLabel1p = new JLabel();
			jLabel1p.setBounds(new Rectangle(15, 7, 557, 20));
			jLabel1p.setText("Introduzca los valores de la muestra, o bien escriba el valor de los 4 estad�sticos");
			jLabel15p = new JLabel();
			jLabel14p = new JLabel();
			jLabel13p = new JLabel();
			jLabel12p = new JLabel();
			jLabel11p = new JLabel();
			jLabel9p = new JLabel();
			jLabel8p = new JLabel();
			jLabel7p = new JLabel();
			jLabel6p = new JLabel();

			Panel3.setLayout(null);
			Panel3.setSize(577, 349);
			jLabel6p.setBounds(210, 117, 52, 15);
			jLabel6p.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel6p.setText("Mediana:");
			jLabel7p.setBounds(210, 138, 72, 16);
			jLabel7p.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel7p.setText("Inter-Decil:");
			jLabel8p.setBounds(210, 161, 63, 19);
			jLabel8p.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel8p.setText("Tasa P-C:");
			jLabel9p.setBounds(210, 185, 69, 17);
			jLabel9p.setFont(new Font("Dialog", Font.PLAIN, 12));
			jLabel9p.setText("Factor P-C:");
			jLabel11p.setBounds(443, 122, 135, 16);
			jLabel11p.setText("Errores de los valores ");
			jLabel12p.setBounds(210, 249, 83, 19);
			jLabel12p.setText("Lambda 1:");
			jLabel13p.setBounds(210, 274, 83, 19);
			jLabel13p.setText("Lambda 2:");
			jLabel14p.setBounds(210, 298, 83, 19);
			jLabel14p.setText("Lambda 3:");
			jLabel15p.setBounds(210, 323, 83, 19);
			jLabel15p.setText("Lambda 4:");
			Panel3.add(getJScrollPanep(), null);
			Panel3.add(jLabel6p, null);
			Panel3.add(jLabel7p, null);
			Panel3.add(jLabel8p, null);
			Panel3.add(jLabel9p, null);
			Panel3.add(getJTextFactorPCp(), null);
			Panel3.add(getJTextTasaPCp(), null);
			Panel3.add(getJTextInterDecilp(), null);
			Panel3.add(getJTextMedianap(), null);
			Panel3.add(getJTextError3p(), null);
			Panel3.add(getJTextError4p(), null);
			Panel3.add(jLabel11p, null);
			Panel3.add(jLabel12p, null);
			Panel3.add(getTxtPercLa1(), null);
			Panel3.add(jLabel13p, null);
			Panel3.add(getTxtPercLa2(), null);
			Panel3.add(jLabel14p, null);
			Panel3.add(getTxtPercLa3(), null);
			Panel3.add(jLabel15p, null);
			Panel3.add(getTxtPercLa4(), null);
			Panel3.add(jLabel1p, null);
			Panel3.add(getJTextInferiorp(), null);
			Panel3.add(jLabel2p, null);
			Panel3.add(getJTextSuperiorp(), null);
			Panel3.add(jLabel3p, null);
			Panel3.add(getJJToolBarBar2(), null);
			Panel3.add(getSeleccionMuestraPerc(), null);
			Panel3.add(labelperc, null);
			Panel3.add(getSeleccionEstadPerc(), null);
			Panel3.add(jLabel5, null);
			Panel3.add(getTxtSignificanciaPerc(), null);
			Panel3.add(getTxtValorCriticoPerc(), null);
			Panel3.add(getBtnValorCriticoPerc(), null);

			grupoPerc = new ButtonGroup();
			grupoPerc.add(seleccionEstadPerc);
			grupoPerc.add(seleccionMuestraPerc);
			grupoPerc.setSelected(seleccionMuestraPerc.getModel(), true);
		}
		return Panel3;
	}

	public JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setBounds(15, 75, 173, 268);
			jScrollPane
			.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
			jScrollPane
			.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
			jScrollPane.setViewportView(getTxtMuestraMom());
		}
		return jScrollPane;
	}

	public JTextField getJTextApuntamiento() {
		if (jTextApuntamiento == null) {
			jTextApuntamiento = new JTextField();
			jTextApuntamiento.setBounds(295, 184, 131, 19);
		}
		return jTextApuntamiento;
	}

	public JTextField getJTextSimetria() {
		if (jTextSimetria == null) {
			jTextSimetria = new JTextField();
			jTextSimetria.setBounds(295, 159, 131, 19);
		}
		return jTextSimetria;
	}

	public JTextField getJTextVarianza() {
		if (jTextVarianza == null) {
			jTextVarianza = new JTextField();
			jTextVarianza.setBounds(295, 136, 131, 19);
		}
		return jTextVarianza;
	}

	public JTextField getJTextMedia() {
		if (jTextMedia == null) {
			jTextMedia = new JTextField();
			jTextMedia.setBounds(295, 114, 131, 19);
		}
		return jTextMedia;
	}

	public JTextField getJTextError3() {
		if (jTextError3 == null) {
			jTextError3 = new JTextField();
			jTextError3.setBounds(444, 160, 144, 19);
		}
		return jTextError3;
	}

	public JTextField getJTextError4() {
		if (jTextError4 == null) {
			jTextError4 = new JTextField();
			jTextError4.setBounds(445, 182, 144, 19);
		}
		return jTextError4;
	}

	public JTextField getTxtmomLa1() {
		if (txtmomLa1 == null) {
			txtmomLa1 = new JTextField();
			txtmomLa1.setBounds(302, 267, 200, 19);
		}
		return txtmomLa1;
	}

	public JTextField getTxtmomLa2() {
		if (txtmomLa2 == null) {
			txtmomLa2 = new JTextField();
			txtmomLa2.setBounds(302, 292, 200, 20);
		}
		return txtmomLa2;
	}

	public JTextField getTxtmomLa3() {
		if (txtmomLa3 == null) {
			txtmomLa3 = new JTextField();
			txtmomLa3.setBounds(302, 317, 200, 19);
		}
		return txtmomLa3;
	}

	public JTextField getTxtmomLa4() {
		if (txtmomLa4 == null) {
			txtmomLa4 = new JTextField();
			txtmomLa4.setBounds(302, 343, 200, 19);
		}
		return txtmomLa4;
	}

	public JTextArea getTxtMuestraMom() {
		if (txtMuestraMom == null) {
			txtMuestraMom = new JTextArea();
		}
		return txtMuestraMom;
	}

	public JTextField getJTextInferior() {
		if (jTextInferior == null) {
			jTextInferior = new JTextField();
			jTextInferior.setBounds(new Rectangle(223, 227, 62, 19));
			jTextInferior.setText("-0.2499");
		}
		return jTextInferior;
	}

	public JTextField getJTextSuperior() {
		if (jTextSuperior == null) {
			jTextSuperior = new JTextField();
			jTextSuperior.setBounds(new Rectangle(454, 227, 61, 19));
			jTextSuperior.setText("2");
		}
		return jTextSuperior;
	}

	private JToolBar getJJToolBarBar() {
		if (jJToolBarBar == null) {
			jJToolBarBar = new JToolBar();
			jJToolBarBar.setBounds(new Rectangle(15, 359, 172, 29));
			jJToolBarBar.setFloatable(false);
			jJToolBarBar.add(getJBAbrirM());
			jJToolBarBar.add(getJBGuardarM());
			jJToolBarBar.add(getJBEjecutarM());
			jJToolBarBar.add(getJBGraficarM());
			jJToolBarBar.add(getJBParametrosAgM());
		}
		return jJToolBarBar;
	}

	private JButton getJBAbrirM() {
		if (jBAbrirM == null) {
			jBAbrirM = new JButton();
			//jBAbrirM.setIcon(new ImageIcon(getClass().getResource("/principal/abrir.GIF")));
			jBAbrirM.setToolTipText("Abrir Archivo");
			jBAbrirM.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					abrirArchivo();
				}
			});
		}
		return jBAbrirM;
	}

	private JButton getJBGuardarM() {
		if (jBGuardarM == null) {
			jBGuardarM = new JButton();
			//jBGuardarM.setIcon(new ImageIcon(getClass().getResource("/principal/guardar.GIF")));
			jBGuardarM.setToolTipText("Guardar Archivo");
		}
		return jBGuardarM;
	}

	public JButton getJBEjecutarM() {
		if (jBEjecutarM == null) {
			jBEjecutarM = new JButton();
			//jBEjecutarM.setIcon(new ImageIcon(getClass().getResource("/principal/correr.GIF")));
			jBEjecutarM.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					boolean ejecuto=ejecutarGUI();
					getJBEjecutarP().setEnabled(!ejecuto);
					getJBEjecutarM().setEnabled(!ejecuto);
					getJBEjecutarMax().setEnabled(!ejecuto);
				}
			});
			jBEjecutarM.setToolTipText("Evoluci�n Algoritmo");
		}
		return jBEjecutarM;
	}

	private JButton getJBGraficarM() {
		if (jBGraficarM == null) {
			jBGraficarM = new JButton();
			//jBGraficarM.setIcon(new ImageIcon(getClass().getResource("/principal/grafica.JPG")));
			jBGraficarM.setToolTipText("Graficar Distribucion");
			jBGraficarM.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					graficar();
				}
			});
		}
		return jBGraficarM;
	}

	private JButton getJBParametrosAgM() {
		if (jBParametrosAgM == null) {
			jBParametrosAgM = new JButton();
			//jBParametrosAgM.setIcon(new ImageIcon(getClass().getResource("/principal/parametros.GIF")));
			jBParametrosAgM
			.setToolTipText("Cambiar Parametros del Algoritmo genetico");
			jBParametrosAgM
			.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					mostrarOpcionesAg();
				}
			});
		}
		return jBParametrosAgM;
	}

	private JToolBar getJJToolBarBar1() {
		if (jJToolBarBar1 == null) {
			jJToolBarBar1 = new JToolBar();
			jJToolBarBar1.setBounds(new Rectangle(15, 359, 172, 29));
			jJToolBarBar1.add(getJBAbrirMax());
			jJToolBarBar1.add(getJBGuardarMax());
			jJToolBarBar1.add(getJBEjecutarMax());
			jJToolBarBar1.add(getJBGraficarMax());
			jJToolBarBar1.add(getJBParametrosAgMax());
			jJToolBarBar1.setFloatable(false);

		}
		return jJToolBarBar1;
	}

	private JButton getJBAbrirMax() {
		if (jBAbrirMax == null) {
			jBAbrirMax = new JButton();
			//jBAbrirMax.setIcon(new ImageIcon(getClass()
			//		.getResource("abrir.gif")));
			jBAbrirMax.setToolTipText("Abrir Archivo");
			jBAbrirMax.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					abrirArchivo();
				}
			});
		}
		return jBAbrirMax;
	}

	private JButton getJBGuardarMax() {
		if (jBGuardarMax == null) {
			jBGuardarMax = new JButton();
			//jBGuardarMax.setIcon(new ImageIcon(getClass().getResource(
			//"guardar.gif")));
			jBGuardarMax.setToolTipText("Guardar Archivo");
		}
		return jBGuardarMax;
	}

	public JButton getJBEjecutarMax() {
		if (jBEjecutarMax == null) {
			jBEjecutarMax = new JButton();
			jBEjecutarMax.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					boolean ejecuto=ejecutarGUI();
					getJBEjecutarP().setEnabled(!ejecuto);
					getJBEjecutarM().setEnabled(!ejecuto);
					getJBEjecutarMax().setEnabled(!ejecuto);
			}
			});
			//jBEjecutarMax.setIcon(new ImageIcon(getClass().getResource(	"correr.gif")));
			jBEjecutarMax.setToolTipText("Evoluci�n Algoritmo");
		}
		return jBEjecutarMax;
	}

	private JButton getJBGraficarMax() {
		if (jBGraficarMax == null) {
			jBGraficarMax = new JButton();
			//jBGraficarMax.setIcon(new ImageIcon(getClass().getResource("/principal/grafica.JPG")));
			jBGraficarMax.setToolTipText("Graficar Distribucion");
			jBGraficarMax.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					graficar();
				}
			});
		}
		return jBGraficarMax;
	}

	private JButton getJBParametrosAgMax() {
		if (jBParametrosAgMax == null) {
			jBParametrosAgMax = new JButton();
			//jBParametrosAgMax.setIcon(new ImageIcon(getClass().getResource(	"parametros.gif")));
			jBParametrosAgMax.setToolTipText("Cambiar Parametros del Algoritmo genetico");
			jBParametrosAgMax.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					mostrarOpcionesAg();
				}
			});
		}
		return jBParametrosAgMax;
	}

	private JToolBar getJJToolBarBar2() {
		if (jJToolBarBar2 == null) {
			jJToolBarBar2 = new JToolBar();
			jJToolBarBar2.setBounds(new Rectangle(15, 359, 171, 29));
			jJToolBarBar2.add(getJBAbrirP());
			jJToolBarBar2.add(getJBGuardarP());
			jJToolBarBar2.add(getJBEjecutarP());
			jJToolBarBar2.add(getJBGraficarP());
			jJToolBarBar2.add(getJBParametrosAgP());
			jJToolBarBar2.setFloatable(false);
		}
		return jJToolBarBar2;
	}

	private JButton getJBAbrirP() {
		if (jBAbrirP == null) {
			jBAbrirP = new JButton();
			//jBAbrirP.setIcon(new ImageIcon(getClass().getResource("abrir.gif")));
			jBAbrirP.setToolTipText("Abrir Archivo");
			jBAbrirP.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					abrirArchivo();
				}
			});
		}
		return jBAbrirP;
	}

	private JButton getJBGuardarP() {
		if (jBGuardarP == null) {
			jBGuardarP = new JButton();
			//jBGuardarP.setIcon(new ImageIcon(getClass().getResource("/principal/guardar.GIF")));
			jBGuardarP.setToolTipText("Guardar Archivo");
		}
		return jBGuardarP;
	}

	public JButton getJBEjecutarP() {
		if (jBEjecutarP == null) {
			jBEjecutarP = new JButton();
			//jBEjecutarP.setIcon(new ImageIcon(getClass().getResource("correr.gif")));
			jBEjecutarP.setToolTipText("Evoluci�n Algoritmo");
			jBEjecutarP.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					boolean ejecuto=ejecutarGUI();
					getJBEjecutarP().setEnabled(!ejecuto);
					getJBEjecutarM().setEnabled(!ejecuto);
					getJBEjecutarMax().setEnabled(!ejecuto);
				}
			});
		}
		return jBEjecutarP;
	}

	private JButton getJBGraficarP() {
		if (jBGraficarP == null) {
			jBGraficarP = new JButton();
			//jBGraficarP.setIcon(new ImageIcon(getClass().getResource("/principal/grafica.JPG")));
			jBGraficarP.setToolTipText("Graficar Distribucion");
			jBGraficarP.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					graficar();
				}
			});
		}
		return jBGraficarP;
	}

	private JButton getJBParametrosAgP() {
		if (jBParametrosAgP == null) {
			jBParametrosAgP = new JButton();
			//jBParametrosAgP.setIcon(new ImageIcon(getClass().getResource("/principal/parametros.GIF")));
			jBParametrosAgP.setToolTipText("Cambiar Parametros del Algoritmo genetico");
			jBParametrosAgP.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					mostrarOpcionesAg();
				}
			});
		}
		return jBParametrosAgP;
	}// @jve:decl-index=0:visual-constraint="10,10"

	/**
	 * This method initializes jTexteErrorMaxVer	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	public JTextField getJTexteErrorMaxVer() {
		if (jTexteErrorMaxVer == null) {
			jTexteErrorMaxVer = new JTextField();
			jTexteErrorMaxVer.setBounds(new Rectangle(314, 265, 200, 19));
		}
		return jTexteErrorMaxVer;
	}

	
	// main() para correrlo como una aplicacion independiente
	
	
	public static void main(String[] args) {
		JFrame p = new JFrame("Estimaci�n de par�metros DLG mediante AG");
		p.add(new EstandarxDLG(p));
		p.setSize(615, 460);
		p.setVisible(true);
		p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	
	
	//Ejemplo de c�mo nos deberian llamar en la integraci�n

	/*
	public static void main(String arg[]){
		double[] x={-0.300232159,
				-1.277683168,
				0.244257308,
				1.27647354,
				1.198350219,
				1.733133104,
				-2.18358764,
				-0.234181243,
				1.095022526,
				-1.086700649,
				-0.69020416,
				-1.690432327,
				-1.846910891,
				-0.977629497,
				-0.773507054,
				-2.117931217,
				-0.567924872,
				-0.404047569,
				0.134853053,
				-0.365492951,
				-0.32699063,
				-0.370240514,
				1.342641553,
				-0.085284455,
				-0.186157649,
				-0.513207397,
				1.972211976,
				0.865672973,
				2.375654731,
				-0.654906671};
		ParametrosEntrada entrada= new ParametrosEntrada();
		ParametrosSalida salida= new ParametrosSalida();

		entrada.muestra=x;
		entrada.ProbCruce=0.5;
		entrada.ProbMutacion=0.1;
		entrada.poblacion=200;
		entrada.generaciones=10000;
		entrada.ErrorEsperado=1.0E-15;
		entrada.metodo=1; // met percentiles

		JFrame frame= new JFrame("Estimaci�n de par�metros DLG mediante AG");
		EstandarxDLG dlg2 = new EstandarxDLG(-0.2499,2);//con espacio de bsuqeda definido
		dlg2.ponerParametros(entrada,0);
		//frame.getContentPane().add(dlg2,BorderLayout.CENTER);
		frame.add(dlg2); // se pone en el jframe
		frame.setVisible(true);
		frame.setSize( 615,460 );
		dlg2.ejecutar();

		//se obtienen los resultados en forma 
		// de objeto ParametrosSalida

		salida=(ParametrosSalida)dlg2.obtenerResultados(); 
		double lambda1= salida.lambda1;
		double lambda2 = salida.lambda2;
		double lambda3= salida.lambda3;
		double lambda4= salida.lambda4;
		double error= salida.errorReal;

		// Se hace lo que se necesite con esos resultados

		System.out.println("Resultados:");
		System.out.println();
		System.out.println("lambda 1: "+lambda1);
		System.out.println("lambda 2: "+lambda2);
		System.out.println("lambda 3: "+lambda3);
		System.out.println("lambda 4: "+lambda4);
		System.out.println("lambda error: "+error);
	}
	*/
	 
}  //  @jve:decl-index=0:visual-constraint="10,10"